춤추는망고
컴퓨터처럼 생각하고, 말하듯 코딩하기
🏠
Home
Algorithm
📒
Course
📒
Programmers
Computer Science
📒
Crash Course
📒
Major Knowledge
Technical Interview
📒
Data Structure
Experience Storage
📒
Review Storage
TIL
2021
02
📒
01~06
📒
07~13
📒
14~20
📒
21~28
03
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~31
04
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~30
05
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~31
06
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~30
07
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~31
08
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~31
09
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~30
10
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~31
11
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~30
12
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~31
2022
01
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~31
02
📒
01~07
📒
08~14
📒
15~21
📒
22~28
03
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~31
04
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~30
05
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~31
06
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~30
07
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~31
08
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~31
09
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~30
10
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~31
11
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~30
12
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~31
2023
01
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~31
02
📒
01~07
📒
08~14
📒
15~21
📒
22~28
03
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~31
04
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~30
05
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~31
06
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~30
07
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~31
08
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~31
09
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~30
10
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~31
11
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~30
12
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~31
2024
01
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~31
02
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~29
03
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~31
04
📒
01~07
📒
08~14
📒
15~21
📒
22~28
📒
29~30
Idea Pocket
📒
Life Algorithm
Memory Store
📒
Memos
📒
Tips

31. 사이버 보안

September 19, 2021

hello world

해당 포스트는 아래 수업의 내용을 바탕으로 작성되었습니다.

- Youtube : ‘Crash Course’
- Professor : ‘Carrie Anne Philbin’

0. 시작하기에 앞서,

지난 세 편의 수업에서는, 여러 컴퓨터가 상호 연결되는 방식과 그 원리에 대해 배웠다.

  • 또, 그러한 연결 방식 덕분에 전 세계에 걸쳐, 거의 즉각적으로 통신하는 것이 가능해졌다.
  • 하지만, 네트워크 사용자 모두가 규칙을 따르고, 다른 사용자들을 배려하는 것은 아니다.

현실에는 범죄를 최소화하기 위한 자물쇠, 울타리, 경찰관 등 물리적 보안 체계가 있다.

  • 이와 마찬가지로, 가상 세계만을 위한 ‘사이버 보안(Cybersecurity)’ 체계도 필요하다.
  • 가상 세계에서 발생하는 여러 가지 범죄와 그로 인한 피해를 최소화하기 위해서 말이다.

컴퓨터는 윤리를 모르기 때문에, 형식적으로 명시된 문제를 입력하면 결과를 반환한다.

  • 컴퓨터는 병원 시스템을 공격하는 코드와 환자의 생명유지 장치의 코드를 구분하지 못한다.

컴퓨터는 잘만 사용하면 좋은 도구가 될 수도 있지만, 반대로 범죄의 표적이 될 수도 있다.

때문에, 사이버 보안은 가상 세계에서의 안전에 있어서 아주 중요한 의미를 지니고 있다.

1. 사이버 보안의 목적

사이버 보안이 필요한 영역의 범위는, 컴퓨팅 능력이 발전함에 따라 빠르게 확장되었다.

  • 사이버 보안은 ‘위협으로부터 컴퓨터 체계와 정보를 보호하는 기술’ 이라 할 수 있다.
  • 구체적인 목표는 ‘기밀성(Secrecy)’, ‘무결성(Integrity)’, ‘가용성(Availability)’ 이다.

기밀성은 ‘특정 컴퓨터 체계나 정보에는, 승인된 사용자만이 접근할 수 있다.’ 라는 성질이다.

  • 이 성질은 비밀성이라고도 불리며, 영어로는 ‘Confidentiality’ 라고 표기하기도 한다.
  • 해커가 사용자의 신용 카드 정보를 공개하는 정보 침해 행위는 기밀성에 대한 공격이다.

무결성은 ‘체계/정보에 대한 사용/수정 권한은 승인된 사용자에게만 주어진다.’ 라는 성질이다.

  • 해커가 암호를 찾아 사용자를 사칭하여 이메일을 보내는 것은 무결성에 대한 공격이다.

가용성은 ‘승인된 사용자라면, 체계와 정보에 항상 접근할 수 있어야 한다.’ 라는 성질이다.

  • 가용성에 대한 공격의 예시로는, ‘서비스 거부 공격(Denial of Service, DoS)’ 이 있다.
  • DoS 공격은 해커가 특정 웹 사이트에 가짜 요청으로 과부하를 주는 형태의 공격이다.
  • 결국, 이러한 서버 과부하로 인해, 접속 속도가 느려지거나, 아예 접근할 수 없게 된다.

2. 위협 모델과 공격 벡터

이러한 목표들을 달성하기 위해, 보안 전문가들은 공격자(enemy) 에 대한 사양을 정의한다.

  • 이렇게 정의된 사양을, 추상적인 계층에서는 ‘위협 모델(Threat Model)’ 이라고 부른다.
  • 그리고, 위협 모델은 공격자의 역량, 목표, 가능한 공격 수단 등을 명시하는 역할을 한다.
  • 이 때, 이렇게 명시된 공격자에 대한 정보들은 ‘공격 벡터(Attack Vector)’ 라고 한다.

이러한 위협 모델을 이용하여, 체계나 정보에 접근하고자 하는 해커의 공격에 대비할 수 있다.

위협 모델을 통해 확인한 각각의 구체적인 위협에 대해, 여러 해결책을 준비할 수 있기 때문이다.


특정 사용자의 노트북을, 물리적인 접근으로부터 보호하고자 하는 상황이라고 가정해보자.

이러한 상황에서는, '사용자와 같은 방을 사용하는 룸메이트' 가 위협 모델이 될 수 있다.
  • 이 때, 기밀성, 무결성, 가용성을 유지하기 위해, 노트북을 세탁 바구니에 숨겨둘 수 있다.

하지만, '노트북이 있는 장소를 아는 사용자의 가족 구성원' 도 위협 모델이 될 수도 있다.
  • 만약 그렇다면, 금고에 노트북을 넣고 잠가버리는 등의 추가적인 조치가 필요할 것이다.


다시 말해, 보안을 위협하는 대상이 누구인지에 따라서, 보안 유지 방식이 달라진다는 뜻이다.

  • 물론, 위협 모델은 보통, 위의 예시에 등장했던 ‘룸메이트’ 보다는 더 형식적으로 정의된다.
  • 이 때, 위협 모델은, 주로 기술적인 측면에서 공격자의 역량이 어느 정도인지를 명시한다.
  • ‘시간의 제약을 받지 않고, 노트북에 물리적으로 접근할 수 있는 사람’ 을 예로 들 수 있다.

보안 설계자는, 주어진 위협 모델을 확인하고, 그에 맞는 보안 유지 해결책을 마련해야 한다.

‘공격자에게 비밀번호를 제공하는 사용자는 없다.’ 처럼 특정한 조건이 충족되는 한 말이다.

3. 보안과 인증

이렇게, 컴퓨터 체계, 네트워크, 정보의 보안을 유지하는 방법에는 여러 가지가 있을 수 있다.

  • 대부분의 보안은 ‘사용자가 누구인가?’ 와 ‘접근하고자 하는 대상이 무엇인가?’ 으로 요약된다.
  • 이를 영어로 바꿔서 표현하면, ‘Who are you?’ 과 ‘What should you have access to?’ 이다.

접근 권한은 올바른 사용자들에게만 주어져야 하며, 잘못된 사용자의 접근은 거부해야 한다.

은행 직원들은 ATM을 다시 채우기 위해 열 수 있어야 하지만, 다른 사람들은 그렇지 않다.


이러한 이유로, 올바른 사용자를 구별하기 위해 ‘인증(Authentication)’ 이라는 절차를 거친다.

여기서, 인증이란, 컴퓨터가 자신의 상호 작용 대상이 누구인지를 인식하는 데에 필요한 절차다.


보통, 인증 수단이 되는 요소들은 세 가지 유형으로 나뉘며, 유형마다 장단점이 서로 다르다.

인증 수단의 유형 ‘알고 있는 것’, ‘가지고 있는 것’, ‘누구인지’ 에 대해 좀 더 자세히 알아보자.

4. 비밀번호와 무차별 대입 공격

인증 수단 중에서도 '알고 있는 것' 은, '실제 사용자와 컴퓨터만 아는 정보', 즉, 비밀 정보다.

  • 아이디와 비밀번호를 예로 들 수 있으며, 이는 구현하기 쉬워서 가장 널리 사용된다.
  • 하지만, 해커가 비밀 정보를 우연히라도 알게 되면, 인증 수단은 제 역할을 못 한다.
    ('123456', 'qwerty' 처럼, 누구나 쉽게 알아낼 수 있는 비밀번호를 예로 들 수 있다.)

물론, PIN 비밀번호 ‘2580’ 처럼, 컴퓨터를 활용하면 쉽게 찾을 수 있는 비밀번호도 있다.

이러한 4자리 PIN 비밀번호의 ‘가능한 숫자 조합의 개수’ 는 많아봤자 10,000개 밖에 없다.

  • 컴퓨터는 1초 미만의 찰나에 0000 ~ 9999까지의 모든 조합을 하나씩 시도해볼 수 있다.
  • 이렇게 단순 무식한 공격 방식은 ‘무차별 대입 공격(Brute Force Attack)’ 이라고 부른다.
  • 이는 모든 입력을 시도해보기 때문에 붙은 이름이며, 특별한 기술을 필요로 하지 않는다.

이에 대한 대응으로, 일부 컴퓨터 체계는 잘못된 접근 시도 횟수에 따라 페널티를 부여한다.
  • 비밀번호를 일정 횟수 이상 잘못 입력하면 사용자를 제한하거나 대기 시간을 부여하는 등

panelty for wrong attempts

  • 이는 흔하긴 해도 합리적인 방어 전략이며, 기술력이 조잡한 공격자들은 쉽게 막아낸다.

하지만, 공격자가 수만 대의 컴퓨터를 장악해 봇넷(botnet) 을 구성한 상황이라면 어떨까?

  • 수많은 컴퓨터가, 동시에 똑같은 PIN 비밀번호를 수많은 은행 계좌에 시도해볼 것이다.
  • 그러면, 단 한 번의 시도에, 같은 비밀번호를 사용하는 계좌 여럿이 한 번에 뚫릴 것이다.

비밀번호 길이를 늘리는 것이 도움은 되겠지만, 8자리 PIN 비밀번호도 여전히 쉽게 뚫린다.

complex password condition

  • 이러한 이유로, 대부분의 웹사이트가 대/소문자와 특수 문자를 섞어서 사용하길 권장한다.
  • 이렇게 여러 문자를 섞어서 사용하면, 가능한 비밀번호 조합의 수가 폭발적으로 늘어난다.
  • 8자리 PIN 비밀번호가 갖는 가능한 조합의 수는 1억 개. 컴퓨터에겐 여전히 쉬운 일이다.
  • 하지만, 문자를 섞어서 사용하면, 8자리 비밀번호의 가능한 조합은 600조 개를 넘게 된다.

물론, 이러한 비밀번호는 사람이 기억하기 어렵기 때문에, 더 나은 접근 방식이 필요하다.

  • ‘green-brothers-rock’, ‘pizza-tasty-yum’ 과 같이 3개의 단어 조합을 예로 들 수 있다.
  • 영어는 약 100,000개의 단어를 사용하니, 3개면 가능한 조합은 대략 1,000조 개가 된다.
  • 또한, 사전에 포함되지 않는 단어를 사용하는 것이 보안 측면에서는 훨씬 더 효과적이다.

자세한 내용은 ”Computerphile’ 에서 만든 암호 선택에 대한 비디오’ 를 참고하길 바란다.

5. 토큰과 물리적 인증 수단

다음으로, ‘가지고 있는 것’ 은 ‘실제 사용자만 가질 수 있는 비밀 토큰’ 을 기반으로 한다.

열쇠와 자물쇠를 예로 들 수 있는데, 열쇠 없이 자물쇠를 부수지 않고 열 방법은 없다.


이는 비밀번호의 취약점인 ‘guessable(추측 가능한 성질)’ 을 무시하는 인증 수단이다.

  • 또, 물리적 존재가 필요해서, 원격 공격자(remote attacker) 가 접근하기 어려워진다.
  • 외국에 있는 사람이 경기도 민가에 침입하려면, 한국에 직접 와야 하는 것처럼 말이다.

하지만, 공격자가 물리적으로 가까이 있다면, 인증 수단 자체가 쉽게 무력해질 수 있다.

열쇠는 복사될 수 있고, 휴대전화는 도난당할 수 있고, 자물쇠는 부서질 수 있기 때문이다.

6. 생체 인증과 다요소 인증

마지막으로, '누구인지' 는 '컴퓨터에 자신을 인식시킬 수 있는 요소' 를 기반으로 한다.

  • 요즘 사용되는 지문 판독기나 홍채 인식기와 같은 생체 인증 장치가 전형적인 예시다.
  • 이는 매우 안전한 방식이지만, 최신 기술을 사용하려면 여전히 큰 비용이 필요하다.

이러한 ‘생체 인증(Biometric Authentication)’ 정보는, 센서의 환경에 따라 달라진다.

앞에서 살펴본 '알고 있는 것'과 '가지고 있는 것'은, 결정론적(deterministic) 이다.  

- 결정론적이란, 같은 입력이 주어지면, 항상 같은 결과를 내는 '예측 가능한' 성질이다.
- 이러한 결정론적 인증 수단은 유효 여부를 확실히 구분하므로, 안정적이라 할 수 있다.
  • 하지만, 생체 인증은 주변 환경의 영향을 받을 수 있어서 확률적(probabilistic) 이다.

인증 체계가 사용자를 인식하지 못할 가능성이 있고, 상황에 따라 그 확률이 달라진다.
  • 모자나 마스크를 쓰고 있는 상황, 조명 상태가 좋지 않은 상황 등을 예로 들 수 있다.

  • 게다가, 안면 인식의 경우, 비슷하게 생긴 전혀 다른 사람을 사용자로 인식할 수 있다.
  • 물론, 이러한 상황이 발생할 확률은 아주 낮지만, 절대 발생하지 않는다는 보장은 없다.

이러한 생체 인증이 가지는 또 다른 문제점 중 하나는 ‘되돌릴 수 없다.’ 라는 점이다.

  • 사람은 손가락을 여러 개 가지고 있지만, 공격자가 지문 정보를 손상시킨다면 어떨까?
  • 공격자가 사용자를 스토킹하거나 물리적으로 공격하면, 더 큰 문제로 번질 수도 있다.

또한, 비교적 최근 연구진들은 사진을 찍는 것만으로도 홍채 위조가 가능함을 입증했다.

따라서, 홍채를 이용하는 인증 방식이라고 해서, 절대적인 안전성을 보장하는 것은 아니다.


이렇게 모든 인증 수단에는 각자 강점과 약점이 있으며 모두 어떤 식으로든 손상될 수 있다.

  • 따라서, 보안 전문가들은 중요한 항목에 대해 두 종류 이상의 인증 수단을 쓰길 권장한다.
  • 이러한 방식을 이중 인증 또는 ‘다요소 인증(Multi-Factor Authentication)’ 이라고 한다.
  • 비밀번호를 알아내거나 휴대전화를 훔칠 수는 있지만, 한 번에 둘 다 하긴 어려울 것이다.

7. 접근 제어와 보안 모델

이렇게 다양한 방식으로 인증 과정이 진행된 후엔 ‘접근 제어(Access Control)’ 가 제공된다.

  • 이 때, 체계(system) 는 인증된 사용자가 접근할 수 있는 항목이 무엇인지 알아야 한다.
  • 이를 위해, 누가, 무엇을 보고, 수정하고, 사용할 수 있는지에 대한 사양을 정해야 한다.

접근 제어는 접근 제어 목록(Access Control List) 에 정의된 권한(permission) 을 따른다.

접근 제어 목록은 컴퓨터의 모든 파일, 폴더, 프로그램에 대한 접근 권한을 설명하는 정보다.

  • ‘읽기(read)’ 권한은 말 그대로 사용자가 파일의 내용을 확인할 수 있도록 하는 권한이다.
  • ‘쓰기(write)’ 권한은 사용자가 파일의 내용을 마음대로 수정할 수 있도록 하는 권한이다.
  • ‘실행(execute)’ 권한은 사용자가 파일을 프로그램처럼 실행할 수 있도록 하는 권한이다.

기밀성, 무결성, 가용성을 보장하려면, 이러한 접근 제어 목록을 올바르게 구성해야 한다.

영화 속 첩보 기관처럼, 접근 권한이 엄격하게 나뉘어야 하는 집단에서는 특히 중요하다.


공개(public), 보안(security), 일급 비밀(top secret) 등의 접근 계층이 있다고 가정해보자.

아래 내용은, 이론보다는 경험에 근거한 범용 지침(general rule of thumb) 을 따른다.

  • 사용자는 자신이 가진 읽기 권한보다 하위 계층에 있는 정보만 확인할 수 있어야 한다.

보안 계층의 읽기 권한은 공개/보안 계층에만 적용. 일급 비밀 정보는 확인할 수 없다.

  • 사용자는 자신이 가진 쓰기 권한보다 상위 계층에 있는 정보만 수정할 수 있어야 한다.

일급 비밀 계층의 쓰기 권한이 있다고 해도, 공개/보안 계층의 정보는 수정할 수 없다.


이러한 ‘보안 모델(Security Model)’ 을 ‘벨-라파둘라 모델(Bell-LaPadula Model)’ 이라 한다.

  • 미국 국방성의 다단계 보안 정책(multilevel security policy) 을 위해 공식화된 모델이다.
  • 위에서 예시와 함께 살펴봤듯, ‘no read up, no write down’ 의 특징을 지니는 모델이다.

이외에도, ‘만리장성 모델(Chinese Wall Model)’, ‘비바 모델(Biba Model)’ 등의 모델이 있다.

어떤 보안 모델이 적합한지는, 해당 보안 모델이 사용되는 상황이나 조건에 따라 달라진다.

8. 악성 소프트웨어와 구현 오류

인증과 접근 제어는 컴퓨터가 사용자를 인식하고, 접근 가능 여부를 결정하는 데 도움이 된다.

하지만, 보안 프로그램을 실행하는 하드웨어와 소프트웨어에 대한 신뢰에 크게 의존한다.


만약, 공격자가 컴퓨터에 악성 소프트웨어(malicious software) 를 설치하면 어떻게 될까?

  • 아마, 설치된 악성 소프트웨어, 즉, ‘맬웨어(Malware)’ 에 의해 운영 체제가 손상될 것이다.
  • 이러한 상황이 발생한다면, ‘보안 프로그램이 공격자를 막을 수 있다.’ 는 보장이 없어진다.

즉, 프로그램이나 컴퓨팅 체계에 대해, 완전한 보안 상태를 보장할 방법이 없다는 뜻이다.

이론상으론 안전해도, 구현 과정에서의 버그는 여전히 취약점을 유발할 수 있기 때문이다.


하지만, 이러한 버그가 발생할 가능성을 조금이라도 줄일 수 있는 기술이 여러 가지 있다.

버그의 원인 지점을 찾아 빠르게 패치하거나, 프로그램 손상으로 발생한 피해를 줄이는 등


물론, 보안 관련 오류는 대부분, 구현 중에 발생하므로, 오류를 줄이려면 구현량을 줄이면 된다.

  • 체계 수준의 보안(system-level security) 에서 중요한 요소 중 하나를 예시로 살펴보자.
    '보안 커널(Security Kernel)'을 이용해 구현한 'TCB(Trusted Computing Base)'
    
    - TCB는 보안을 유지하는 데에 아주 중요한 역할을 하는 요소들로 구성된 집합이다.
    - 때문에, 내부에서 발생하는 보안 문제는, 컴퓨터 체계 전체에 영향을 줄 수도 있다.
  • 보안 커널은 이러한 TCB의 핵심 요소이므로, 어떤 요소를 포함할지를 잘 결정해야 한다.

이 때, 문제가 생길 수 있는 코드의 양, 즉, 구현량 자체를 줄이는 것이 가장 효과적이다.

9. 독립적인 검증/확인과 격리 원칙

이렇게 코드의 양을 최소화한 후에도, 작성한 코드가 안전하다는 것을 제대로 확인해야 한다.

‘코드의 보안 안정성에 대한 형식적인 검증’ 은 연구가 활발히 진행되고 있는 연구 분야다.


현재로선, ‘독립적인 검증/확인(Independent Verification & Validation)’ 절차가 최선이다.

이는 수많은 보안 지향적(security-minded) 개발자들이 코드를 감사(audit) 하는 절차다.

  • 보안 관련 코드 대부분이 오픈 소스로 관리되는 이유는 이러한 절차가 있기 때문이다.
  • 자신이 직접 작성한 코드에서 버그를 찾아내는 것은 개발자로서는 꽤 어려운 일이다.
  • 하지만, 다른 전문 지식과 신선한 안목을 갖춘 외부인이라면 쉽게 찾을 수 있을 것이다.

또, 비슷한 생각을 가진 해커와 보안 전문가들이 아이디어를 공유할 수 있는 모임도 있다.

그중에서도 규모가 가장 큰 것은, 라스베이거스에서 개최되는 ‘데프 콘(DEF CON)’ 이다.


이렇게 많은 노력을 해도, 영리하고 실력 있는 공격자들은 이를 파훼할 방법들을 찾아낸다.

  • 때문에, 좋은 개발자라면, 이를 염두에 두고 발생한 피해를 최소화하려 노력해야 한다.
  • 또한, 이렇게 발생한 피해가 컴퓨터의 다른 작업에 영향을 주지 않도록 신경 써야 한다.
  • 이렇게 프로그램의 문제가 확장되지 않도록 하는 원칙을 ‘격리(Isolation)’ 라고 한다.

프로그램의 실행 영역을 샌드박스화(sandbox) 하면 이러한 격리 원칙을 달성할 수 있다.

  • 이는 아이들이 놀 수 있는 모래가 있는 공간(샌드박스) 에 화난 아이를 넣는 것과 같다.
  • 아이가 심하게 난동을 부린다고 해도, 부술 수 있는 건 그 안에 있는 모래성밖에 없다.
  • 또, 아이가 아무리 난리를 쳐도, 주변에서 놀고 있는 다른 아이들은 영향을 받지 않는다.

운영 체제는, 프로그램을 샌드박스화하기 위해 프로그램마다 자체 메모리 블록을 할당한다.

메모리 블록으로 각 구역이 명확하게 나뉘기 때문에, 모든 프로그램이 자연스럽게 격리된다.


아니면, 한 대의 컴퓨터에서 여러 대의 ‘가상 머신(Virtual Machine)’ 을 실행할 수도 있다.

  • 가상 머신이란, 컴퓨터상에서 가상의 컴퓨터 체계를 시뮬레이션하는 소프트웨어다.
  • 가상 머신은 다른 프로그램들과 마찬가지로, 자체 샌드박스를 할당받아 실행된다.
  • 실행 중인 프로그램에 문제가 생기면, 해당 가상 머신은 충돌하거나 손상될 수 있다.
  • 하지만, 다른 가상 머신들은 격리되어 있기 때문에, 그 어떠한 영향도 받지 않는다.

10. 암호화에 관하여,

이렇게, 컴퓨터 보안에 관련된 몇 가지 핵심 주제들을 넓은 범위에 걸쳐 간략하게 살펴봤다.

하지만, 방화벽(Firewall) 과 같은 네트워크 보안에 관련된 내용은 아직 다루지도 못했다.


다음 수업에서는, 해커가 어떤 식으로 다른 사람의 컴퓨터 체계에 침입하는지 알아볼 것이다.

  • 그리고, 그다음 수업에서는 ‘암호화(encryption)’ 에 관련된 내용들을 다뤄볼 것이다.
  • 마지막으로, 이번 수업에서 배운 내용들을 활용해, 자신의 보안을 더 강화하길 바란다.

see ya

배운 점, 느낀 점

사이버 보안의 구체적인 목적과 보안 전략을 세우는 데 필요한 요소들에 대해 배웠다.

  • 사이버 보안의 목적은 여러 위협으로부터 기밀성, 무결성, 가용성을 보호하는 것이다.
  • 보안 유지 전략을 세우려면, 공격자의 역량, 목표, 공격 수단 등의 정보들이 필요하다.
  • 이 때, 공격자에 대한 사양과 구체적인 정보들을 각각 위협 모델, 공격 벡터라고 한다.
  • 이러한 정보를 통해, 구체적인 위협을 확인하고, 그에 대한 해결책을 준비할 수 있다.

사용자 인식과 접근 권한의 중요성, 인증 수단의 유형과 각각의 장단점에 대해 배웠다.

  • 보안 유지에 가장 중요한 요소는 ‘어떤 사용자가 어떤 대상에 접근할 수 있는가’ 이다.
  • 잘못된 사용자의 접근, 올바른 사용자의 권한 남용은 문제로 이어질 수 있기 때문이다.
  • 이 때, 체계에 접근한 사용자가 올바른 사용자인지 확인하는 절차를 인증이라고 한다.
  • 인증 수단의 대표적인 유형으로는, ‘알고 있는 것’, ‘가지고 있는 것’, ‘누구인지’ 가 있다.
  • 비밀번호(알고 있는 것), 토큰(가지고 있는 것), 생체 인증(누구인지) 등이 그 예시이다.
  • 알고 있는 것 유형의 장점은 구현하기 쉬운 구조, 단점은 추측 가능하다는 성질이다.
  • 가지고 있는 것 유형의 장점은 물리적인 제약, 단점은 물리적 접근에 대한 무력함이다.
  • 누구인지 유형의 장점은 기술력으로 보장되는 안전함, 단점은 확률적이라는 성질이다.
  • 이러한 단점들은, 인증 수단을 여러 개 활용하는 다요소 인증 방식으로 보완할 수 있다.

인증된 사용자가 가질 수 있는 권한의 종류와 각 권한을 관리하는 방법에 대해 배웠다.

  • 보안 유지를 위해서는, 각 사용자가 올바른 접근 권한을 가지도록 하는 것이 중요하다.
  • 권한은 모든 파일, 폴더, 프로그램에 대해 사용자가 할 수 있는 행위를 정의한 요소다.
  • 권한은 읽기(정보 확인), 쓰기(정보 수정), 실행(프로그램 실행), 크게 세 가지로 나뉜다.
  • 이러한 권한을 기준으로, 사용자의 접근 행위를 제한하는 작업을 접근 제어라고 한다.
  • 이러한 접근 제어의 기준이 되는 권한은 접근 제어 목록이라는 요소에 의해 정의된다.
  • 그리고, 이러한 접근 제어 목록은 보안 목적에 맞는 보안 모델에 근거하여 정의된다.

보안 체계 이외의 영역에서 발생할 수 있는 다양한 문제들과 해결 방법에 대해 배웠다.

  • 인증과 접근 제어는 보안 프로그램을 실행하는 하드웨어와 소프트웨어에 크게 의존한다.
  • 때문에, 공격자가 악성 소프트웨어를 설치해, 운영 체제를 손상시키면 쉽게 무력화된다.
  • 이렇게, 컴퓨터 체계의 다른 부분에서 보안 취약점이 생겨날 수 있으므로 주의해야 한다.
  • 보안 프로그램은 이론상으로는 안전할지 몰라도, 구현 과정에서 버그가 발생할 수 있다.
  • 이 때, 구현량을 줄이면, 버그가 발생할 수 있는 지점이 적어져, 구현 오류가 줄어든다.
  • 이외에도, 독립적인 검증/확인 절차를 통해, 버그 발생 지점들을 빠르게 찾아낼 수 있다.
  • 이러한 대응 작업을 한 후에도, 공격자가 보안 요소들을 파훼하는 상황에 대비해야 한다.
  • 이렇게 보안이 뚫려 문제가 생긴 경우, 프로그램을 격리하면, 문제 확산을 막을 수 있다.
  • 프로그램마다 메모리 블록을 할당해, 실행 영역을 구분하면, 프로그램을 격리할 수 있다.
  • 또, 컴퓨터상에서 가상 머신을 실행하면, 컴퓨터 체계 단위로 격리 원칙을 지킬 수 있다.

(해당 글의 작성 과정은 post/crash-course/31 (#132) 에서 확인하실 수 있습니다.)

# 컴퓨터 공학